package ar.edu.utn.frsf.tpae.a2012.g05.entity;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name = "cta_cte")
@DiscriminatorValue("1")
public class CuentaCorriente extends Cuenta {
	@Column(name = "cta_cte_max_op_mens", nullable = false, unique = true)
	private Integer cantMaxOpMensuales;
	
	@Column(name = "cta_cte_cost_mant", nullable = false, unique = true)
	private BigDecimal costoMantenimiento;
	
	@Column(name = "cta_cte_lim_sdo_neg", nullable = false, unique = true)
	private BigDecimal limiteSaldoNegativo;
	
	@Column(name = "cta_cte_int_sdo_neg", nullable = false, unique = true)
	private BigDecimal interesSaldoNegativo;

	public CuentaCorriente() {
		super();
		this.setTipoCuenta(Cuenta.CUENTA_CORRIENTE);
	}

	public CuentaCorriente(boolean b) {
		this();
		if(b) {
			this.id = 1;
			this.numero = 123456;
			this.idCliente = 1;
			this.fechaApertura = new Date();
			this.saldoActual = new BigDecimal(123.45);
			this.cantMaxOpMensuales = 10;
			this.costoMantenimiento = new BigDecimal(30);
			this.limiteSaldoNegativo = new BigDecimal(1000);
			this.interesSaldoNegativo = new BigDecimal(12.5);
		}
	}

	public Integer getCantMaxOpMensuales() {
		return cantMaxOpMensuales;
	}

	public void setCantMaxOpMensuales(Integer cantMaxOpMensuales) {
		this.cantMaxOpMensuales = cantMaxOpMensuales;
	}

	public BigDecimal getCostoMantenimiento() {
		return costoMantenimiento;
	}

	public void setCostoMantenimiento(BigDecimal costoMantenimiento) {
		this.costoMantenimiento = costoMantenimiento;
	}

	public BigDecimal getLimiteSaldoNegativo() {
		return limiteSaldoNegativo;
	}

	public void setLimiteSaldoNegativo(BigDecimal limiteSaldoNegativo) {
		this.limiteSaldoNegativo = limiteSaldoNegativo;
	}

	public BigDecimal getInteresSaldoNegativo() {
		return interesSaldoNegativo;
	}

	public void setInteresSaldoNegativo(BigDecimal interesSaldoNegativo) {
		this.interesSaldoNegativo = interesSaldoNegativo;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime
				* result
				+ ((cantMaxOpMensuales == null) ? 0 : cantMaxOpMensuales
						.hashCode());
		result = prime
				* result
				+ ((costoMantenimiento == null) ? 0 : costoMantenimiento
						.hashCode());
		result = prime
				* result
				+ ((interesSaldoNegativo == null) ? 0 : interesSaldoNegativo
						.hashCode());
		result = prime
				* result
				+ ((limiteSaldoNegativo == null) ? 0 : limiteSaldoNegativo
						.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		CuentaCorriente other = (CuentaCorriente) obj;
		if (cantMaxOpMensuales == null) {
			if (other.cantMaxOpMensuales != null)
				return false;
		} else if (!cantMaxOpMensuales.equals(other.cantMaxOpMensuales))
			return false;
		if (costoMantenimiento == null) {
			if (other.costoMantenimiento != null)
				return false;
		} else if (!costoMantenimiento.equals(other.costoMantenimiento))
			return false;
		if (interesSaldoNegativo == null) {
			if (other.interesSaldoNegativo != null)
				return false;
		} else if (!interesSaldoNegativo.equals(other.interesSaldoNegativo))
			return false;
		if (limiteSaldoNegativo == null) {
			if (other.limiteSaldoNegativo != null)
				return false;
		} else if (!limiteSaldoNegativo.equals(other.limiteSaldoNegativo))
			return false;
		return true;
	}
	
}
